Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Swing (Java)</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/Swing_(Java)"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Swing_Java rootpage-Swing_Java skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">Swing (Java)</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<p><b>Swing</b> is a <a href="Graphical_user_interface" title="Graphical user interface">GUI</a> <a href="Widget_toolkit" title="Widget toolkit">widget toolkit</a> for <a href="Java_(programming_language)" title="Java (programming language)">Java</a>.<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> It is part of <a href="Oracle_Corporation" title="Oracle Corporation">Oracle</a>'s <a href="Java_Foundation_Classes" title="Java Foundation Classes">Java Foundation Classes</a> (JFC)&nbsp;– an <a href="Application_programming_interface" class="mw-redirect" title="Application programming interface">API</a> for providing a <a href="Graphical_user_interface" title="Graphical user interface">graphical user interface</a> (GUI) for Java programs.
</p><p>Swing was developed to provide a more sophisticated set of GUI <a href="Software_component" title="Software component">components</a> than the earlier <a href="Abstract_Window_Toolkit" title="Abstract Window Toolkit">Abstract Window Toolkit (AWT)</a>. Swing provides a <a href="Look_and_feel" title="Look and feel">look and feel</a> that emulates the look and feel of several platforms, and also supports a <a href="Pluggable_look_and_feel" title="Pluggable look and feel">pluggable look and feel</a> that allows applications to have a look and feel unrelated to the underlying platform. It has more powerful and flexible components than AWT. In addition to familiar components such as buttons, check boxes and labels, Swing provides several advanced components such as tabbed panel, scroll panes, trees, tables, and lists.<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>
</p><p>Unlike AWT components, Swing components are not implemented by platform-specific code. Instead, they are written entirely in Java and therefore are platform-independent.
</p><p>In December 2008, <a href="Sun_Microsystems" title="Sun Microsystems">Sun Microsystems</a> (Oracle's predecessor) released the <a href="Cascading_Style_Sheets" class="mw-redirect" title="Cascading Style Sheets">CSS</a> / <a href="FXML" title="FXML">FXML</a> based framework that it intended to be the successor to Swing, called <a href="JavaFX" title="JavaFX">JavaFX</a>.<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup>
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="History">History</h2></div>
<p>The <a href="Internet_Foundation_Classes" title="Internet Foundation Classes">Internet Foundation Classes</a> (IFC) were a <a href="Graphics_library" title="Graphics library">graphics library</a> for Java originally developed by <a href="Netscape_Communications_Corporation" class="mw-redirect" title="Netscape Communications Corporation">Netscape Communications Corporation</a> and first released on December 16, 1996. On April 2, 1997, <a href="Sun_Microsystems" title="Sun Microsystems">Sun Microsystems</a> and <a href="Netscape_Communications_Corporation" class="mw-redirect" title="Netscape Communications Corporation">Netscape Communications Corporation</a> announced their intention to incorporate IFC with other technologies to form the <a href="Java_Foundation_Classes" title="Java Foundation Classes">Java Foundation Classes</a>.<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> The "Java Foundation Classes" were later renamed "Swing."
</p><p>Swing introduced a mechanism that allowed the <a href="Look_and_feel" title="Look and feel">look and feel</a> of every component in an application to be altered without making substantial changes to the application code. The introduction of support for a <a href="Pluggable_look_and_feel" title="Pluggable look and feel">pluggable look and feel</a> allows Swing components to emulate the appearance of native components while still retaining the benefits of platform independence.
Originally distributed as a separately downloadable library, Swing has been included as part of the <a href="Java_Platform%2C_Standard_Edition" title="Java Platform, Standard Edition">Java Standard Edition</a> since release 1.2.<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> The Swing classes and components are contained in the <code><a rel="nofollow" class="external text" href="https://docs.oracle.com/en/java/javase/24/docs/api/java.desktop/javax/swing/package-summary.html">javax.swing</a></code> <a href="Java_package" title="Java package">package</a> hierarchy.
</p><p>Development of Swing's successor, <a href="JavaFX" title="JavaFX">JavaFX</a>, started in 2005, and it was officially introduced two years later at JavaOne 2007.<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup> JavaFX was open-sourced in 2011 and, in 2012, it became part of the Oracle JDK download. JavaFX is replacing Swing owing to several advantages, including being more lightweight, having <a href="Cascading_Style_Sheets" class="mw-redirect" title="Cascading Style Sheets">CSS</a> styling, sleek design controls, and the use of <a href="FXML" title="FXML">FXML</a> and Scene Builder.<sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup> In 2018, JavaFX was made a part of the OpenJDK under the OpenJFX project to increase the pace of its development.<sup id="cite_ref-8" class="reference"><a href="#cite_note-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup>
</p><p>Members of the Java Client team that was responsible for Swing included James Gosling (Architect), Rick Levenson (manager), Amy Fowler &amp; Hans Muller (co-technical leads), Tom Ball, Jeff Dinkins, Georges Saab,<sup id="cite_ref-9" class="reference"><a href="#cite_note-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup> Tim Prinzing, Jonni Kanerva, and Jeannette Hung &amp; Jim Graham (2D Graphics).<sup id="cite_ref-10" class="reference"><a href="#cite_note-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Architecture">Architecture</h2></div>
<p>Swing is a platform-independent, "<a href="Model%E2%80%93view%E2%80%93controller" title="Model–view–controller">model–view–controller</a>" <a href="GUI" class="mw-redirect" title="GUI">GUI</a> framework for Java, which follows a single-<a href="Thread_(computing)" title="Thread (computing)">threaded</a> programming model.<sup id="cite_ref-11" class="reference"><a href="#cite_note-11"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup> Additionally, this framework provides a layer of abstraction between the code structure and graphic presentation of a Swing-based GUI.
</p>
<div class="mw-heading mw-heading3"><h3 id="Foundations">Foundations</h3></div>
<p>Swing is platform-independent because it is completely written in Java. Complete documentation for all Swing classes can be found in the <a rel="nofollow" class="external text" href="https://docs.oracle.com/javase/6/docs/api/">Java API Guide</a> for Version 6 or the <a rel="nofollow" class="external text" href="https://docs.oracle.com/javase/8/docs/api/">Java Platform Standard Edition 8 API Specification</a> for Version 8.
</p>
<div class="mw-heading mw-heading4"><h4 id="Extensible">Extensible</h4></div>
<p>Swing is a highly modular-based architecture, which allows for the "plugging" of various custom implementations of specified framework interfaces: Users can provide their own custom implementation(s) of these components to override the default implementations using Java's inheritance mechanism via <code><a rel="nofollow" class="external text" href="https://docs.oracle.com/en/java/javase/24/docs/api/java.desktop/javax/swing/LookAndFeel.html">LookAndFeel</a></code>.
</p><p>Swing is a <b>component-based framework</b>, whose components are all ultimately derived from the <code><a rel="nofollow" class="external text" href="https://docs.oracle.com/en/java/javase/24/docs/api/java.desktop/javax/swing/JComponent.html">JComponent</a></code> class. Swing objects asynchronously fire events, have bound properties, and respond to a documented set of methods specific to the component. Swing components are <a href="JavaBeans" title="JavaBeans">JavaBeans</a> components, compliant with the <a rel="nofollow" class="external text" href="https://www.oracle.com/java/technologies/javase/javabeans-spec.html">JavaBeans specification</a>.
</p>
<div class="mw-heading mw-heading4"><h4 id="Configurable">Configurable</h4></div>
<p>Swing's heavy reliance on runtime mechanisms and indirect composition patterns allows it to respond at run time to fundamental changes in its settings. For example, a Swing-based application is capable of <a href="Hot_swapping" title="Hot swapping">hot swapping</a> its user-interface during runtime. Furthermore, users can provide their own look and feel implementation, which allows for uniform changes in the look and feel of existing Swing applications without any programmatic change to the application code.
</p>
<div class="mw-heading mw-heading4"><h4 id="Lightweight_UI">Lightweight UI</h4></div>
<p>Swing's high level of flexibility is reflected in its inherent ability to override the native host <a href="Operating_system" title="Operating system">operating system</a> (OS)'s GUI controls for displaying itself. Swing "paints" its controls using the Java 2D APIs, rather than calling a native user interface toolkit. Thus, a Swing component does not have a corresponding native OS GUI component, and is free to render itself in any way that is possible with the underlying graphics GUIs.
</p><p>However, at its core, every Swing component relies on an <a href="Abstract_Window_Toolkit" title="Abstract Window Toolkit">AWT</a> container, since (Swing's) <code><a rel="nofollow" class="external text" href="https://docs.oracle.com/en/java/javase/24/docs/api/java.desktop/javax/swing/JComponent.html">JComponent</a></code> extends (AWT's) Container. This allows Swing to plug into the host OS's GUI management framework, including the crucial device/screen mappings and user interactions, such as key presses or mouse movements. Swing simply "transposes" its own (OS-agnostic) semantics over the underlying (OS-specific) components. So, for example, every Swing component paints its rendition on the graphic device in response to a call to component.paint(), which is defined in (AWT) Container. But unlike AWT components, which delegated the painting to their OS-native "heavyweight" widget, Swing components are responsible for their own rendering.
</p><p>This transposition and decoupling is not merely visual, and extends to Swing's management and application of its own OS-independent semantics for events fired within its component containment hierarchies. Generally speaking, the Swing architecture delegates the task of mapping the various flavors of OS GUI semantics onto a simple, but generalized, pattern to the AWT container. Building on that generalized platform, it establishes its own rich and complex GUI semantics in the form of the <code><a rel="nofollow" class="external text" href="https://docs.oracle.com/en/java/javase/24/docs/api/java.desktop/javax/swing/JComponent.html">JComponent</a></code> model.
</p>
<div class="mw-heading mw-heading4"><h4 id="Loosely_coupled_and_MVC">Loosely coupled and MVC</h4></div>
<p>The Swing library makes heavy use of the <a href="Model%E2%80%93view%E2%80%93controller" title="Model–view–controller">model–view–controller</a> software <a href="Design_pattern_(computer_science)" class="mw-redirect" title="Design pattern (computer science)">design pattern</a>,<sup id="cite_ref-12" class="reference"><a href="#cite_note-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup> which conceptually decouples the data being viewed from the user interface controls through which it is viewed. Because of this, most Swing components have associated <i>models</i> (which are specified in terms of Java <a href="Interface_(computer_science)" class="mw-redirect" title="Interface (computer science)">interfaces</a>), and the programmers can use various default implementations or provide their own. The framework provides default implementations of model interfaces for all of its concrete components. The typical use of the Swing framework does not require the creation of custom models, as the framework provides a set of default implementations that are transparently, by default, associated with the corresponding <code><a rel="nofollow" class="external text" href="https://docs.oracle.com/en/java/javase/24/docs/api/java.desktop/javax/swing/JComponent.html">JComponent</a></code> child class in the Swing library. In general, only complex components, such as tables, trees and sometimes lists, may require the custom model implementations around the application-specific data structures. To get a good sense of the potential that the Swing architecture makes possible, consider the hypothetical situation where custom models for tables and lists are wrappers over <a href="Data_Access_Object" class="mw-redirect" title="Data Access Object">DAO</a> and/or <a href="Ejb" class="mw-redirect" title="Ejb">EJB</a> services.
</p><p>Typically, Swing component model objects are responsible for providing a concise interface defining events fired, and accessible properties for the (conceptual) data model for use by the associated JComponent. Given that the overall MVC pattern is a loosely coupled collaborative object relationship pattern, the model provides the programmatic means for attaching event listeners to the data model object.wat these events are model centric (ex: a "row inserted" event in a table model) and are mapped by the JComponent <a href="Subclass_(computer_science)" class="mw-redirect" title="Subclass (computer science)">specialization</a> into a meaningful event for the GUI component.
</p><p>For example, the <code><a rel="nofollow" class="external text" href="https://docs.oracle.com/en/java/javase/24/docs/api/java.desktop/javax/swing/JTable.html">JTable</a></code> has a model called <code><a rel="nofollow" class="external text" href="https://docs.oracle.com/en/java/javase/24/docs/api/java.desktop/javax/swing/table/TableModel.html">TableModel</a></code> that describes an interface for how a table would access tabular data. A default implementation of this operates on a two-dimensional <a href="Array_data_structure" class="mw-redirect" title="Array data structure">array</a>.
</p><p>The view component of a Swing JComponent is the object used to graphically represent the conceptual GUI control. A distinction of Swing, as a GUI framework, is in its reliance on programmatically rendered GUI controls (as opposed to the use of the native host OS's GUI controls). Prior to <a href="Java_version_history#Java_SE_6" title="Java version history">Java 6 Update 10</a>, this distinction was a source of complications when mixing AWT controls, which use native controls, with Swing controls in a GUI (see <a href="Abstract_Window_Toolkit#Mixing_AWT_and_Swing_components" title="Abstract Window Toolkit">Mixing AWT and Swing components</a>).
</p><p>Finally, in terms of visual composition and management, Swing favors <a href="Layout_manager" title="Layout manager">relative layouts</a> (which specify the positional relationships between components) as opposed to absolute layouts (which specify the exact location and size of components). This bias towards "fluid"' visual ordering is due to its origins in the <a href="Java_applet" title="Java applet">applet</a> operating environment that framed the design and development of the original Java GUI toolkit. (Conceptually, this view of the layout management is quite similar to that which informs the rendering of HTML content in browsers, and addresses the same set of concerns that motivated the former.)
</p>
<div class="mw-heading mw-heading3"><h3 id="Relationship_to_AWT">Relationship to AWT</h3></div>

<p>Since early versions of Java, a portion of the <a href="Abstract_Window_Toolkit" title="Abstract Window Toolkit">Abstract Window Toolkit</a> (AWT) has provided platform-independent APIs for user interface components. In AWT, each component is rendered and controlled by a native peer component specific to the underlying windowing system.
</p><p>By contrast, Swing components are often described as <i>lightweight</i> because they do not require allocation of native resources in the operating system's windowing toolkit. The AWT components are referred to as <i>heavyweight components</i>.<sup id="cite_ref-13" class="reference"><a href="#cite_note-13"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup>
</p><p>Much of the Swing API is generally a complementary extension of the AWT rather than a direct replacement. In fact, every Swing lightweight interface ultimately exists within an AWT heavyweight component because all of the top-level components in Swing (<code><a rel="nofollow" class="external text" href="https://docs.oracle.com/en/java/javase/24/docs/api/java.desktop/javax/swing/JApplet.html">JApplet</a></code>, <code><a rel="nofollow" class="external text" href="https://docs.oracle.com/en/java/javase/24/docs/api/java.desktop/javax/swing/JDialog.html">JDialog</a></code>, <code><a rel="nofollow" class="external text" href="https://docs.oracle.com/en/java/javase/24/docs/api/java.desktop/javax/swing/JFrame.html">JFrame</a></code>, and <code><a rel="nofollow" class="external text" href="https://docs.oracle.com/en/java/javase/24/docs/api/java.desktop/javax/swing/JWindow.html">JWindow</a></code>) extend an AWT top-level container. Prior to <a href="Java_version_history#Java_SE_6" title="Java version history">Java 6 Update 10</a>, the use of both lightweight and heavyweight components within the same window was generally discouraged due to <a href="Z-order" title="Z-order">Z-order</a> incompatibilities. However, later versions of Java have fixed these issues, and both Swing and AWT components can now be used in one GUI without Z-order issues.
</p><p>The core rendering functionality used by Swing to draw its lightweight components is provided by <a href="Java_2D" title="Java 2D">Java 2D</a>, another part of JFC.
</p>
<style data-mw-deduplicate="TemplateStyles:r1305433154">
/* start https://en.wikipedia.org/ */


.mw-parser-output .ambox{border:1px solid #a2a9b1;border-left:10px solid #36c;background-color:#fbfbfb;box-sizing:border-box}.mw-parser-output .ambox+link+.ambox,.mw-parser-output .ambox+link+style+.ambox,.mw-parser-output .ambox+link+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+style+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+link+.ambox{margin-top:-1px}html body.mediawiki .mw-parser-output .ambox.mbox-small-left{margin:4px 1em 4px 0;overflow:hidden;width:238px;border-collapse:collapse;font-size:88%;line-height:1.25em}.mw-parser-output .ambox-speedy{border-left:10px solid #b32424;background-color:#fee7e6}.mw-parser-output .ambox-delete{border-left:10px solid #b32424}.mw-parser-output .ambox-content{border-left:10px solid #f28500}.mw-parser-output .ambox-style{border-left:10px solid #fc3}.mw-parser-output .ambox-move{border-left:10px solid #9932cc}.mw-parser-output .ambox-protection{border-left:10px solid #a2a9b1}.mw-parser-output .ambox .mbox-text{border:none;padding:0.25em 0.5em;width:100%}.mw-parser-output .ambox .mbox-image{border:none;padding:2px 0 2px 0.5em;text-align:center}.mw-parser-output .ambox .mbox-imageright{border:none;padding:2px 0.5em 2px 0;text-align:center}.mw-parser-output .ambox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ambox .mbox-image-div{width:52px}@media(min-width:720px){.mw-parser-output .ambox{margin:0 10%}}@media print{body.ns-0 .mw-parser-output .ambox{display:none!important}}


/* end https://en.wikipedia.org/ */
</style>
<div class="mw-heading mw-heading3"><h3 id="Relationship_to_SWT">Relationship to SWT</h3></div>
<p>The <a href="Standard_Widget_Toolkit" title="Standard Widget Toolkit">Standard Widget Toolkit</a> (SWT) is a competing toolkit originally developed by <a href="IBM" title="IBM">IBM</a> and now maintained by the <a href="Eclipse_(software)" title="Eclipse (software)">Eclipse</a> <a href="Free_software_community" class="mw-redirect" title="Free software community">community</a>. SWT's implementation has more in common with the heavyweight components of AWT. This confers benefits such as more accurate fidelity with the underlying native windowing toolkit, at the cost of an increased exposure to the native platform in the programming model.
</p><p>There has been significant debate and speculation about the performance of SWT versus Swing; some hinted that SWT's heavy dependence on <a href="Java_Native_Interface" title="Java Native Interface">JNI</a> would make it slower when the GUI component and Java need to communicate data, but faster at rendering when the data model has been loaded into the GUI, but this has not been confirmed either way.<sup id="cite_ref-14" class="reference"><a href="#cite_note-14"><span class="cite-bracket">[</span>14<span class="cite-bracket">]</span></a></sup> A fairly thorough set of benchmarks in 2005 concluded that neither Swing nor SWT clearly outperformed the other in the general case.<sup id="cite_ref-15" class="reference"><a href="#cite_note-15"><span class="cite-bracket">[</span>15<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Examples">Examples</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Hello_World">Hello World</h3></div>
<p>This example Swing application creates a single window with "Hello, world!" inside:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="c1">// Hello.java (Java SE 8)</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.swing.*</span><span class="p">;</span>

<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">Hello</span><span class="w"> </span><span class="kd">extends</span><span class="w"> </span><span class="n">JFrame</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="nf">Hello</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">super</span><span class="p">(</span><span class="s">"Hello World"</span><span class="p">);</span>
<span class="w"> </span><span class="n">setDefaultCloseOperation</span><span class="p">(</span><span class="n">WindowConstants</span><span class="p">.</span><span class="na">EXIT_ON_CLOSE</span><span class="p">);</span>
<span class="w"> </span><span class="n">add</span><span class="p">(</span><span class="k">new</span><span class="w"> </span><span class="n">JLabel</span><span class="p">(</span><span class="s">"Hello, world!"</span><span class="p">));</span>
<span class="w"> </span><span class="n">pack</span><span class="p">();</span>
<span class="w"> </span><span class="n">setVisible</span><span class="p">(</span><span class="kc">true</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>

<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="n">String</span><span class="o">[]</span><span class="w"> </span><span class="n">args</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">SwingUtilities</span><span class="p">.</span><span class="na">invokeLater</span><span class="p">(</span><span class="n">Hello</span><span class="p">::</span><span class="k">new</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<p>The first <b><code>import</code></b> includes all the public classes and interfaces from the <b><code><a rel="nofollow" class="external text" href="https://docs.oracle.com/en/java/javase/24/docs/api/java.desktop/javax/swing/package-summary.html">javax.swing</a></code></b> package.
</p><p>The <code><b>Hello</b></code> class <code><b>extends</b></code> the <b><code><a rel="nofollow" class="external text" href="https://docs.oracle.com/en/java/javase/24/docs/api/java.desktop/javax/swing/JFrame.html">JFrame</a></code></b> class; the <code>JFrame</code> class implements a <a href="Window_(computing)" title="Window (computing)">window</a> with a <a href="Title_bar" class="mw-redirect" title="Title bar">title bar</a> and a close <a href="Graphical_control_element" class="mw-redirect" title="Graphical control element">control</a>.
</p><p>The <code><b>Hello()</b></code> <a href="Constructor_(object-oriented_programming)" title="Constructor (object-oriented programming)">constructor</a> initializes the frame by first calling the superclass constructor, passing the parameter <code>"Hello World"</code>, which is used as the window's title. It then calls the <b><code><a rel="nofollow" class="external text" href="https://docs.oracle.com/en/java/javase/24/docs/api/java.desktop/javax/swing/JFrame.html#setDefaultCloseOperation(int)">setDefaultCloseOperation(int)</a></code></b> method inherited from <code>JFrame</code> to set the default operation when the close control on the title bar is selected to <b><code><a rel="nofollow" class="external text" href="https://docs.oracle.com/en/java/javase/24/docs/api/java.desktop/javax/swing/WindowConstants.html#EXIT_ON_CLOSE">WindowConstants.EXIT_ON_CLOSE</a></code></b>&nbsp;– this causes the <code>JFrame</code> to be disposed of when the frame is closed (as opposed to merely hidden), which allows the Java virtual machine to exit and the program to terminate. Next, a <b><code><a rel="nofollow" class="external text" href="https://docs.oracle.com/en/java/javase/24/docs/api/java.desktop/javax/swing/JLabel.html">JLabel</a></code></b> is created for the string <b>"Hello, world!"</b> and the <b><code><a rel="nofollow" class="external text" href="https://docs.oracle.com/en/java/javase/24/docs/api/java.desktop/java/awt/Container.html#add(java.awt.Component)">add(Component)</a></code></b> method inherited from the <code><a rel="nofollow" class="external text" href="https://docs.oracle.com/en/java/javase/24/docs/api/java.desktop/java/awt/Container.html">Container</a></code> superclass is called to add the label to the frame. The <b><code><a rel="nofollow" class="external text" href="https://docs.oracle.com/en/java/javase/24/docs/api/java.desktop/java/awt/Window.html#pack()">pack()</a></code></b> method inherited from the <code><a rel="nofollow" class="external text" href="https://docs.oracle.com/en/java/javase/24/docs/api/java.desktop/java/awt/Window.html">Window</a></code> superclass is called to size the window and lay out its contents. The <b><code><a rel="nofollow" class="external text" href="https://docs.oracle.com/en/java/javase/24/docs/api/java.desktop/java/awt/Component.html#setVisible(boolean)">setVisible(boolean)</a></code></b> method inherited from the <code><a rel="nofollow" class="external text" href="https://docs.oracle.com/en/java/javase/24/docs/api/java.desktop/java/awt/Component.html">Component</a></code> superclass is called with the Boolean parameter <code><b>true</b></code>, which causes the frame to be displayed.
</p><p>The <code><b>main()</b></code> method is called by the Java virtual machine when the program starts. It <a href="Object_(computer_science)" title="Object (computer science)">instantiates</a> a new <b><code>Hello</code></b> frame. The code uses the <b><code><a rel="nofollow" class="external text" href="https://docs.oracle.com/en/java/javase/24/docs/api/java.desktop/javax/swing/SwingUtilities.html#invokeLater(java.lang.Runnable)">invokeLater(Runnable)</a></code></b> method to invoke the constructor from the AWT <a href="Event_dispatching_thread" title="Event dispatching thread">event dispatching thread</a> in order to ensure the code is executed in a <a href="Thread-safe" class="mw-redirect" title="Thread-safe">thread-safe</a> manner. Once the frame is displayed, exiting the <code>main</code> method does not cause the program to terminate because the event dispatching thread remains active until all of the Swing top-level windows have been disposed.
</p>
<div class="mw-heading mw-heading3"><h3 id="Window_with_Button">Window with Button</h3></div>

<p>The following is a rather simple Swing-based program. It displays a window (a <code><a rel="nofollow" class="external text" href="https://docs.oracle.com/en/java/javase/24/docs/api/java.desktop/javax/swing/JFrame.html">JFrame</a></code>) containing a label and a button.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kn">import</span><span class="w"> </span><span class="nn">java.awt.FlowLayout</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.swing.JButton</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.swing.JFrame</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.swing.JLabel</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.swing.WindowConstants</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.swing.SwingUtilities</span><span class="p">;</span>
<span class="w"> </span>
<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">SwingExample</span><span class="w"> </span><span class="kd">implements</span><span class="w"> </span><span class="n">Runnable</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="n">JFrame</span><span class="w"> </span><span class="n">f</span><span class="p">;</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="nf">SwingExample</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// Create the window</span>
<span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">JFrame</span><span class="p">(</span><span class="s">"Hello World!"</span><span class="p">);</span>
<span class="w"> </span><span class="c1">// Sets the behavior for when the window is closed</span>
<span class="w"> </span><span class="n">f</span><span class="p">.</span><span class="na">setDefaultCloseOperation</span><span class="p">(</span><span class="n">WindowConstants</span><span class="p">.</span><span class="na">EXIT_ON_CLOSE</span><span class="p">);</span>
<span class="w"> </span><span class="c1">// Add a layout manager so that the button is not placed on top of the label</span>
<span class="w"> </span><span class="n">f</span><span class="p">.</span><span class="na">setLayout</span><span class="p">(</span><span class="k">new</span><span class="w"> </span><span class="n">FlowLayout</span><span class="p">());</span>
<span class="w"> </span><span class="c1">// Add a label and a button</span>
<span class="w"> </span><span class="n">f</span><span class="p">.</span><span class="na">add</span><span class="p">(</span><span class="k">new</span><span class="w"> </span><span class="n">JLabel</span><span class="p">(</span><span class="s">"Hello, world!"</span><span class="p">));</span>
<span class="w"> </span><span class="n">f</span><span class="p">.</span><span class="na">add</span><span class="p">(</span><span class="k">new</span><span class="w"> </span><span class="n">JButton</span><span class="p">(</span><span class="s">"Press me!"</span><span class="p">));</span><span class="w"> </span>
<span class="w"> </span><span class="p">}</span>

<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">run</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// Arrange the components inside the window</span>
<span class="w"> </span><span class="n">f</span><span class="p">.</span><span class="na">pack</span><span class="p">();</span>
<span class="w"> </span><span class="c1">// By default, the window is not visible. Make it visible.</span>
<span class="w"> </span><span class="n">f</span><span class="p">.</span><span class="na">setVisible</span><span class="p">(</span><span class="kc">true</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="n">String</span><span class="o">[]</span><span class="w"> </span><span class="n">args</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// Schedules the application to be run at the correct time in the event queue.</span>
<span class="w"> </span><span class="n">SwingUtilities</span><span class="p">.</span><span class="na">invokeLater</span><span class="p">(</span><span class="k">new</span><span class="w"> </span><span class="n">SwingExample</span><span class="p">());</span>
<span class="w"> </span><span class="p">}</span>

<span class="p">}</span>
</pre></div>
<p>Notice how all instantiation and handling of Swing components are done by creating an instance of the class,
which implements the Runnable interface. This is then run on the <a href="Event_Dispatch_Thread" class="mw-redirect" title="Event Dispatch Thread">Event Dispatch Thread</a> by use of the method <code><a rel="nofollow" class="external text" href="https://docs.oracle.com/en/java/javase/24/docs/api/java.desktop/javax/swing/SwingUtilities.html#invokeLater(java.lang.Runnable)">SwingUtilities.invokeLater(Runnable)</a></code>), created in the main method (see <a href="Event_dispatching_thread#Swing_and_thread_safety" title="Event dispatching thread">Swing and thread safety</a>). Although Swing code can be run without using this technique (for instance, by not implementing Runnable and moving all commands from the run method to the main method), it is considered to be good form, as Swing is not <a href="Thread_safety" title="Thread safety">thread-safe</a>, meaning that invoking resources from multiple threads can result in thread interference and memory consistency errors.<sup id="cite_ref-16" class="reference"><a href="#cite_note-16"><span class="cite-bracket">[</span>16<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Text_Field">Text Field</h3></div>
<p>Text fields enable users to input text or data into your application. Creating a text field in Swing is straightforward – instantiate a JTextField object and add it to a container.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kn">import</span><span class="w"> </span><span class="nn">javax.swing.*</span><span class="p">;</span>

<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">TextFieldExample</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="n">String</span><span class="o">[]</span><span class="w"> </span><span class="n">args</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// Create a JFrame</span>
<span class="w"> </span><span class="n">JFrame</span><span class="w"> </span><span class="n">frame</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">JFrame</span><span class="p">(</span><span class="s">"Text Field Example"</span><span class="p">);</span>

<span class="w"> </span><span class="c1">// Create a JTextField</span>
<span class="w"> </span><span class="n">JTextField</span><span class="w"> </span><span class="n">textField</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">JTextField</span><span class="p">(</span><span class="mi">20</span><span class="p">);</span>

<span class="w"> </span><span class="c1">// Add the text field to the JFrame</span>
<span class="w"> </span><span class="n">frame</span><span class="p">.</span><span class="na">add</span><span class="p">(</span><span class="n">textField</span><span class="p">);</span>

<span class="w"> </span><span class="c1">// Set the size of the JFrame and make it visible</span>
<span class="w"> </span><span class="n">frame</span><span class="p">.</span><span class="na">setSize</span><span class="p">(</span><span class="mi">300</span><span class="p">,</span><span class="w"> </span><span class="mi">200</span><span class="p">);</span>
<span class="w"> </span><span class="n">frame</span><span class="p">.</span><span class="na">setVisible</span><span class="p">(</span><span class="kc">true</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<p>Enhancing functionality in text fields improves user interaction. By attaching DocumentListener interfaces, you can dynamically monitor changes in the text content, enabling real-time validation, formatting, or auto-completion of input data.
</p><p>Validating text field input is crucial for ensuring data integrity and preventing errors. Swing provides multiple validation techniques, including regular expressions, input masks, or custom validation logic. By implementing InputVerifier interfaces, you can define specific validation rules and offer immediate feedback to users when input is invalid.<sup id="cite_ref-17" class="reference"><a href="#cite_note-17"><span class="cite-bracket">[</span>17<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Another_example">Another example</h3></div>
<p>In this example let javax.swing.JFrame be super class and add our own widget(s) to it (in this case, a JButton).
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kn">import</span><span class="w"> </span><span class="nn">javax.swing.JFrame</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.swing.JButton</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.swing.JOptionPane</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.swing.SwingUtilities</span><span class="p">;</span>

<span class="kn">import</span><span class="w"> </span><span class="nn">java.awt.event.ActionListener</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.awt.event.ActionEvent</span><span class="p">;</span>

<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">Sample</span><span class="w"> </span><span class="kd">extends</span><span class="w"> </span><span class="n">JFrame</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">JButton</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">JButton</span><span class="p">();</span>

<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="nf">Sample</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">super</span><span class="p">();</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="na">setTitle</span><span class="p">(</span><span class="s">"HelloApp"</span><span class="p">);</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="na">getContentPane</span><span class="p">().</span><span class="na">setLayout</span><span class="p">(</span><span class="kc">null</span><span class="p">);</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="na">setBounds</span><span class="p">(</span><span class="mi">100</span><span class="p">,</span><span class="w"> </span><span class="mi">100</span><span class="p">,</span><span class="w"> </span><span class="mi">180</span><span class="p">,</span><span class="w"> </span><span class="mi">140</span><span class="p">);</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="na">add</span><span class="p">(</span><span class="n">makeButton</span><span class="p">());</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="na">setVisible</span><span class="p">(</span><span class="kc">true</span><span class="p">);</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="na">setDefaultCloseOperation</span><span class="p">(</span><span class="n">EXIT_ON_CLOSE</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>

<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="n">JButton</span><span class="w"> </span><span class="nf">makeButton</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">b</span><span class="p">.</span><span class="na">setText</span><span class="p">(</span><span class="s">"Click me!"</span><span class="p">);</span>
<span class="w"> </span><span class="n">b</span><span class="p">.</span><span class="na">setBounds</span><span class="p">(</span><span class="mi">40</span><span class="p">,</span><span class="w"> </span><span class="mi">40</span><span class="p">,</span><span class="w"> </span><span class="mi">100</span><span class="p">,</span><span class="w"> </span><span class="mi">30</span><span class="p">);</span>
<span class="w"> </span><span class="n">b</span><span class="p">.</span><span class="na">addActionListener</span><span class="p">(</span><span class="k">new</span><span class="w"> </span><span class="n">ActionListener</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">actionPerformed</span><span class="p">(</span><span class="n">ActionEvent</span><span class="w"> </span><span class="n">e</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">JOptionPane</span><span class="p">.</span><span class="na">showMessageDialog</span><span class="p">(</span><span class="n">b</span><span class="p">,</span><span class="w"> </span><span class="s">"Hello World!"</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">});</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">b</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>

<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="n">String</span><span class="o">[]</span><span class="w"> </span><span class="n">args</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">InvocationTargetException</span><span class="p">,</span><span class="w"> </span><span class="n">InterruptedException</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// Swing calls must be run by the event dispatching thread.</span>
<span class="w"> </span><span class="n">SwingUtilities</span><span class="p">.</span><span class="na">invokeAndWait</span><span class="p">(()</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Sample</span><span class="p">());</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<p>The layout is set to null using the <code><a rel="nofollow" class="external text" href="https://docs.oracle.com/en/java/javase/24/docs/api/java.desktop/java/awt/Container.html#setLayout(java.awt.LayoutManager)">Container.setLayout(LayoutManager)</a></code> method since JFrame uses java.awt.BorderLayout as its default layout-manager. With BorderLayout anything which is added to the container is placed in the center and stretched to accommodate any other widgets. Of course, most real world GUI applications would prefer to use a layout-manager instead of placing everything on absolute co-ordinates.<sup id="cite_ref-18" class="reference"><a href="#cite_note-18"><span class="cite-bracket">[</span>18<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div>
<ul><li><a href="SwingLabs" title="SwingLabs">swingLabs</a> – Extensions to Swing</li>
<li><a href="Standard_Widget_Toolkit" title="Standard Widget Toolkit">Standard Widget Toolkit</a> – A third party widget toolkit maintained by the <a href="Eclipse_Foundation" title="Eclipse Foundation">Eclipse Foundation</a>.</li>
<li><a href="JavaFX" title="JavaFX">JavaFX</a> – A <a href="Software_platform" class="mw-redirect" title="Software platform">software platform</a> for creating and delivering <a href="Desktop_applications" class="mw-redirect" title="Desktop applications">desktop applications</a> as well as <a href="Rich_Internet_Application" title="Rich Internet Application">rich internet applications</a> that can run across a wide variety of devices, which is intended to be the successor to Swing. JavaFX is under the <a href="OpenJFX" class="mw-redirect" title="OpenJFX">OpenJFX</a> project.<sup id="cite_ref-19" class="reference"><a href="#cite_note-19"><span class="cite-bracket">[</span>19<span class="cite-bracket">]</span></a></sup></li></ul>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Citations">Citations</h3></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */


.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}


/* end https://en.wikipedia.org/ */
</style><div class="reflist reflist-columns references-column-width" style="column-width: 30em;">
<ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-1">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */


.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}


/* end https://en.wikipedia.org/ */
</style><cite class="citation news cs1"><a rel="nofollow" class="external text" href="https://www.techopedia.com/definition/26102/java-swing">"What is Java Swing? - Definition from Techopedia"</a>. <i>Techopedia Inc</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2018-11-03</span></span>.</cite></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-2">^</a></b></span> <span class="reference-text"><cite id="CITEREFYap2003" class="citation web cs1">Yap, Chee (2003-04-30). <a rel="nofollow" class="external text" href="https://cs.nyu.edu/~yap/classes/visual/03s/lect/l7/">"JAVA SWING GUI TUTORIAL"</a>. <i><a href="New_York_University" title="New York University">New York University</a> (NYU)</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2018-11-03</span></span>.</cite></span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-3">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://opensourceforu.com/2017/07/developing-basic-gui-application-using-javafx-eclipse/">"Developing a basic GUI application using JavaFX in Eclipse"</a>. July 2017.</cite></span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-4">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20120509230952/http://www2.prnewswire.com/cgi-bin/stories.pl?ACCT=104&amp;STORY=%2Fwww%2Fstory%2F84048&amp;EDATE=">"Sun and Netscape to jointly develop Java Foundation Classes"</a>. <a href="Netscape_Communications_Corporation" class="mw-redirect" title="Netscape Communications Corporation">Netscape Communications Corporation</a>. 1997-04-02. Archived from <a rel="nofollow" class="external text" href="http://www2.prnewswire.com/cgi-bin/stories.pl?ACCT=104&amp;STORY=/www/story/84048&amp;EDATE=">the original</a> on 2012-05-09<span class="reference-accessdate">. Retrieved <span class="nowrap">2011-08-08</span></span>.</cite></span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-5">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20070816170028/http://www.sun.com/smi/Press/sunflash/1998-12/sunflash.981208.9.xml">"SUN DELIVERS NEXT VERSION OF THE JAVA PLATFORM"</a>. <a href="Sun_Microsystems" title="Sun Microsystems">Sun Microsystems</a>. August 2007. Archived from <a rel="nofollow" class="external text" href="http://www.sun.com/smi/Press/sunflash/1998-12/sunflash.981208.9.xml">the original</a> on August 16, 2007<span class="reference-accessdate">. Retrieved <span class="nowrap">2012-01-08</span></span>. <q><i>The Java Foundation Classes are now core to the Java 2 platform and includes:The Project Swing set of GUI components, Drag &amp; Drop, Java 2D API which provides new 2D and AWT graphics capabilities as well as printing support, The Java look and feel interface, A new Accessibility API </i></q></cite></span>
</li>
<li id="cite_note-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-6">^</a></b></span> <span class="reference-text"><cite id="CITEREFGabriela_Motroc2018" class="citation web cs1">Gabriela Motroc (March 8, 2018). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20190326211553/https://jaxenter.com/jdk-11-javafx-separate-module-142186.html">"JDK 11 update: JavaFX will be decoupled from the JDK"</a>. Archived from <a rel="nofollow" class="external text" href="https://jaxenter.com/jdk-11-javafx-separate-module-142186.html">the original</a> on 2019-03-26.</cite></span>
</li>
<li id="cite_note-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-7">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://opensourceforu.com/2017/07/developing-basic-gui-application-using-javafx-eclipse/">"Developing a basic GUI application using JavaFX in Eclipse"</a>. July 2017.</cite></span>
</li>
<li id="cite_note-8"><span class="mw-cite-backlink"><b><a href="#cite_ref-8">^</a></b></span> <span class="reference-text"><cite id="CITEREFSmith2018" class="citation web cs1">Smith, Donald (March 7, 2018). <a rel="nofollow" class="external text" href="https://blogs.oracle.com/java-platform-group/the-future-of-javafx-and-other-java-client-roadmap-updates">"The Future of JavaFX and Other Java Client Roadmap Updates"</a>.</cite></span>
</li>
<li id="cite_note-9"><span class="mw-cite-backlink"><b><a href="#cite_ref-9">^</a></b></span> <span class="reference-text"><cite id="CITEREFZakhour" class="citation web cs1">Zakhour, Sharon. <a rel="nofollow" class="external text" href="https://blogs.oracle.com/thejavatutorials/why-is-swing-called-swing">"Why is Swing Called Swing?"</a>. <i>The Java Tutorials Blog</i><span class="reference-accessdate">. Retrieved <span class="nowrap">24 September</span> 2020</span>.</cite></span>
</li>
<li id="cite_note-10"><span class="mw-cite-backlink"><b><a href="#cite_ref-10">^</a></b></span> <span class="reference-text"><cite id="CITEREFJohn2003" class="citation web cs1">John, Yu (27 August 2003). <a rel="nofollow" class="external text" href="https://www.computerworld.com/article/2571634/rich-clients-emerge-as-alternatives-for-web-applications.html">"Rich clients emerge as alternatives for Web applications"</a>. <i>ComputerWorld</i><span class="reference-accessdate">. Retrieved <span class="nowrap">24 September</span> 2020</span>.</cite></span>
</li>
<li id="cite_note-11"><span class="mw-cite-backlink"><b><a href="#cite_ref-11">^</a></b></span> <span class="reference-text"><cite id="CITEREFZukowski2007" class="citation web cs1">Zukowski, John (August 21, 2007). <a rel="nofollow" class="external text" href="https://www.infoworld.com/article/2077754/swing-threading-and-the-event-dispatch-thread.html">"Swing threading and the event-dispatch thread"</a>. <i><a href="JavaWorld" class="mw-redirect" title="JavaWorld">JavaWorld</a></i><span class="reference-accessdate">. Retrieved <span class="nowrap">2020-07-26</span></span>.</cite></span>
</li>
<li id="cite_note-12"><span class="mw-cite-backlink"><b><a href="#cite_ref-12">^</a></b></span> <span class="reference-text"><cite id="CITEREFFowler" class="citation web cs1">Fowler, Amy. <a rel="nofollow" class="external text" href="https://www.oracle.com/java/technologies/a-swing-architecture.html">"A Swing Architecture Overview"</a>. <a href="Sun_Microsystems" title="Sun Microsystems">Sun Microsystems</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2020-07-26</span></span>.</cite></span>
</li>
<li id="cite_note-13"><span class="mw-cite-backlink"><b><a href="#cite_ref-13">^</a></b></span> <span class="reference-text"><cite id="CITEREFZakhourPetrov2010" class="citation web cs1">Zakhour, Sharon; Petrov, Anthony (April 2010). <a rel="nofollow" class="external text" href="https://www.oracle.com/technical-resources/articles/java/mixing-components.html">"Mixing Heavyweight and Lightweight Components"</a>. <a href="Oracle_Corporation" title="Oracle Corporation">Oracle</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2020-07-26</span></span>.</cite></span>
</li>
<li id="cite_note-14"><span class="mw-cite-backlink"><b><a href="#cite_ref-14">^</a></b></span> <span class="reference-text"><cite id="CITEREFStrenn2006" class="citation web cs1 cs1-prop-unfit">Strenn, Stephen (March 3, 2006). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20170917172003/http://www.javalobby.org/java/forums/t65168.html">"Swing vs. SWT Performance - Have a Look at the Call Stacks"</a>. <i>Javalobby</i>. Archived from the original on 2017-09-17.</cite></span>
</li>
<li id="cite_note-15"><span class="mw-cite-backlink"><b><a href="#cite_ref-15">^</a></b></span> <span class="reference-text"><cite id="CITEREFŽagarKrižnar2006" class="citation web cs1">Žagar, Klemen; Križnar, Igor (March 3, 2006). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20150526225341/http://public.cosylab.com/CSS/DOC-SWT_Vs._Swing_Performance_Comparison.pdf">"SWT Vs. Swing Performance Comparison"</a> <span class="cs1-format">(PDF)</span> (1.4&nbsp;ed.). Cosylab. Archived from <a rel="nofollow" class="external text" href="http://public.cosylab.com/CSS/DOC-SWT_Vs._Swing_Performance_Comparison.pdf">the original</a> <span class="cs1-format">(PDF)</span> on 2015-05-26. <q><i>It is hard to give a rule-of-thumb where SWT would outperform Swing, or vice versa. In some environments (e.g., Windows), SWT is a winner. In others (Linux, <a href="VMware" title="VMware">VMware</a> hosting Windows), Swing and its redraw optimization outperform SWT significantly. Differences in performance are significant: factors of 2 and more are common, in either direction.</i></q></cite></span>
</li>
<li id="cite_note-16"><span class="mw-cite-backlink"><b><a href="#cite_ref-16">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://docs.oracle.com/javase/tutorial/uiswing/concurrency/dispatch.html">"The Event Dispatch Thread"</a>. <i>docs.oracle.com</i>.</cite></span>
</li>
<li id="cite_note-17"><span class="mw-cite-backlink"><b><a href="#cite_ref-17">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external free" href="https://geeksprogramming.com/java-swing-tutorial-for-beginners/">https://geeksprogramming.com/java-swing-tutorial-for-beginners/</a> The Event Dispatch Thread</span>
</li>
<li id="cite_note-18"><span class="mw-cite-backlink"><b><a href="#cite_ref-18">^</a></b></span> <span class="reference-text"><cite id="CITEREFEckel2006" class="citation book cs1">Eckel, Bruce (2006). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20160514000820/http://www.agentgroup.unimore.it/~nicola/courses/IngegneriaDelSoftware/java/books/ThinkingInJava.pdf"><i>Thinking in Java</i></a> <span class="cs1-format">(PDF)</span> (4&nbsp;ed.). Prentice Hall. p.&nbsp;942. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>978-0131872486</bdi>. Archived from <a rel="nofollow" class="external text" href="http://www.agentgroup.unimore.it/~nicola/courses/IngegneriaDelSoftware/java/books/ThinkingInJava.pdf">the original</a> <span class="cs1-format">(PDF)</span> on 14 May 2016<span class="reference-accessdate">. Retrieved <span class="nowrap">13 May</span> 2016</span>.</cite></span>
</li>
<li id="cite_note-19"><span class="mw-cite-backlink"><b><a href="#cite_ref-19">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.oracle.com/technetwork/java/javase/overview/javafx-overview-2158620.html">"JavaFX Developer Home"</a>. <i>www.oracle.com</i>.</cite></span>
</li>
</ol></div>
<div class="mw-heading mw-heading3"><h3 id="Sources">Sources</h3></div>
<style data-mw-deduplicate="TemplateStyles:r1239549316">
/* start https://en.wikipedia.org/ */


.mw-parser-output .refbegin{margin-bottom:0.5em}.mw-parser-output .refbegin-hanging-indents>ul{margin-left:0}.mw-parser-output .refbegin-hanging-indents>ul>li{margin-left:0;padding-left:3.2em;text-indent:-3.2em}.mw-parser-output .refbegin-hanging-indents ul,.mw-parser-output .refbegin-hanging-indents ul li{list-style:none}@media(max-width:720px){.mw-parser-output .refbegin-hanging-indents>ul>li{padding-left:1.6em;text-indent:-1.6em}}.mw-parser-output .refbegin-columns{margin-top:0.3em}.mw-parser-output .refbegin-columns ul{margin-top:0}.mw-parser-output .refbegin-columns li{page-break-inside:avoid;break-inside:avoid-column}@media screen{.mw-parser-output .refbegin{font-size:90%}}


/* end https://en.wikipedia.org/ */
</style><div class="refbegin" style="">
<ul><li>Matthew Robinson, Pavel Vorobiev: <i>Swing, Second Edition</i>, Manning, <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>1-930110-88-X</bdi></li>
<li>David M. Geary: <i>Graphic Java 2, Volume 2: Swing</i>, Prentice Hall, <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>0-13-079667-0</bdi></li>
<li>John Zukowski: <i>The Definitive Guide to Java Swing, Third Edition</i>, Apress, <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>1-59059-447-9</bdi></li>
<li>James Elliott, Robert Eckstein, Marc Loy, David Wood, Brian Cole: <i>Java Swing</i>, O'Reilly, <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>0-596-00408-7</bdi></li>
<li>Kathy Walrath, Mary Campione, Alison Huml, Sharon Zakhour: <i>The JFC Swing Tutorial: A Guide to Constructing GUIs</i>, Addison-Wesley Professional, <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>0-201-91467-0</bdi></li>
<li>Joshua Marinacci, Chris Adamson: <i>Swing Hacks</i>, O'Reilly, <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>0-596-00907-0</bdi></li>
<li>Ivan Portyankin, <a rel="nofollow" class="external text" href="http://www.ipsoftware.ru/books/swing_book_2/"><i>Swing, Effective User Interfaces (Russian)</i></a>., 2nd Ed., 2010, Moscow, "Lory", <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>5-469-00005-2</bdi></li></ul>
</div>
<div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2></div>
<ul><li><a rel="nofollow" class="external text" href="https://docs.oracle.com/javase/8/docs/technotes/guides/swing">The Swing API documentation</a></li></ul>
<div class="navbox-styles"><style data-mw-deduplicate="TemplateStyles:r1129693374">
/* start https://en.wikipedia.org/ */


.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" · ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}


/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r1236075235">
/* start https://en.wikipedia.org/ */


.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}body.skin--responsive .mw-parser-output .navbox-image img{max-width:none!important}@media print{body.ns-0 .mw-parser-output .navbox{display:none!important}}


/* end https://en.wikipedia.org/ */
</style></div><div role="navigation" class="navbox" aria-labelledby="Java_desktop71" style="padding:3px"><table class="nowraplinks mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><style data-mw-deduplicate="TemplateStyles:r1239400231">
/* start https://en.wikipedia.org/ */


.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}html.skin-theme-clientpref-night .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}}@media print{.mw-parser-output .navbar{display:none!important}}


/* end https://en.wikipedia.org/ */
</style><div id="Java_desktop71" style="font-size:114%;margin:0 4em"><a href="Java_(software_platform)" title="Java (software platform)">Java</a> desktop</div></th></tr><tr><th scope="row" class="navbox-group" style="width:1%">APIs</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Java_Foundation_Classes" title="Java Foundation Classes">Java Foundation Classes</a></li>
<li><a href="Abstract_Window_Toolkit" title="Abstract Window Toolkit">Abstract Window Toolkit</a>
<ul><li><a href="Java_AWT_Native_Interface" title="Java AWT Native Interface">Java AWT Native Interface</a></li></ul></li>
<li><a href="Standard_Widget_Toolkit" title="Standard Widget Toolkit">Standard Widget Toolkit</a></li>
<li><a href="Java_2D" title="Java 2D">Java 2D</a></li>
<li><a href="Java_3D" title="Java 3D">Java 3D</a></li>
<li>
<ul><li><a href="SwingWorker" title="SwingWorker">SwingWorker</a></li>
<li><a href="Pluggable_look_and_feel" title="Pluggable look and feel">Pluggable look and feel</a></li>
<li><a href="Synth_Look_and_Feel" title="Synth Look and Feel">synth Look and Feel</a></li></ul></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Deprecated APIs</th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Java_applet" title="Java applet">Java applet</a></li>
<li><a href="Lightweight_User_Interface_Toolkit" title="Lightweight User Interface Toolkit">Lightweight User Interface Toolkit</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Open-source</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="JavaFX" title="JavaFX">JavaFX</a></li>
<li><a href="Java_OpenGL" title="Java OpenGL">Java OpenGL</a></li>
<li><a href="Java_Bindings_for_OpenGL" title="Java Bindings for OpenGL">Java Bindings for OpenGL</a></li>
<li><a href="Lightweight_Java_Game_Library" class="mw-redirect" title="Lightweight Java Game Library">Lightweight Java Game Library</a>
<ul><li><a href="LibGDX" title="LibGDX">libGDX</a></li></ul></li>
<li><a href="Application_Foundation_Classes" title="Application Foundation Classes">Application Foundation Classes</a></li>
<li><a href="Qt_Jambi" class="mw-redirect" title="Qt Jambi">Qt Jambi</a></li>
<li><a href="QuickTime_for_Java" title="QuickTime for Java">QuickTime for Java</a></li>
<li><a href="SwingLabs" title="SwingLabs">swingLabs</a></li></ul>
</div></td></tr></tbody></table></div>
<div class="navbox-styles"></div><div role="navigation" class="navbox" aria-labelledby="List_of_widget_toolkits573" style="padding:3px"><table class="nowraplinks mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><div id="List_of_widget_toolkits573" style="font-size:114%;margin:0 4em"><a href="List_of_widget_toolkits" title="List of widget toolkits">List</a> of <a href="Widget_toolkit" title="Widget toolkit">widget toolkits</a></div></th></tr><tr><td colspan="2" class="navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"><b>Low-level platform-specific</b></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">On <a href="AmigaOS" title="AmigaOS">AmigaOS</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Intuition_(Amiga)" title="Intuition (Amiga)">Intuition</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">On <a href="Classic_Mac_OS" title="Classic Mac OS">Classic Mac OS</a>, <a href="MacOS" title="MacOS">macOS</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Macintosh_Toolbox" title="Macintosh Toolbox">Macintosh Toolbox</a></li>
<li><a href="Carbon_(API)" title="Carbon (API)">Carbon</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">On <a href="Microsoft_Windows" title="Microsoft Windows">Windows</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Windows_API" title="Windows API">Windows API</a></li>
<li><a href="Universal_Windows_Platform" title="Universal Windows Platform">UWP</a>
<ul><li><a href="Windows_Runtime" title="Windows Runtime">WinRT</a></li></ul></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">On <a href="Unix" title="Unix">Unix</a>,<br>under <a href="X_Window_System" title="X Window System">X11</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Xlib" title="Xlib">Xlib</a></li>
<li><a href="XCB" title="XCB">XCB</a></li>
<li><a href="X_Toolkit_Intrinsics" title="X Toolkit Intrinsics">X Toolkit Intrinsics</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">On <a href="BeOS" title="BeOS">BeOS</a>, <a href="Haiku_(operating_system)" title="Haiku (operating system)">Haiku</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="BeOS_API" class="mw-redirect" title="BeOS API">BeOS API</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">On <a href="Android_(operating_system)" title="Android (operating system)">Android</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th id="CLI38" scope="row" class="navbox-group" style="width:1%"><a href="Common_Language_Infrastructure" title="Common Language Infrastructure">CLI</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Mono_(software)#Xamarin.Android" title="Mono (software)">Xamarin.Android</a></li></ul>
</div></td></tr></tbody></table><div></div></td></tr><tr><td colspan="2" class="navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"><b>Low Level Cross-platform</b></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Common_Language_Infrastructure" title="Common Language Infrastructure">CLI</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="OpenTK" title="OpenTK">OpenTK</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="C_(programming_language)" title="C (programming language)">C</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="GDK" title="GDK">GDK</a></li>
<li><a href="Simple_DirectMedia_Layer" title="Simple DirectMedia Layer">Simple DirectMedia Layer</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Java_(programming_language)" title="Java (programming language)">Java</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Java_OpenGL" title="Java OpenGL">JOGL</a></li>
<li><a href="Lightweight_Java_Game_Library" class="mw-redirect" title="Lightweight Java Game Library">LWJGL</a></li></ul>
</div></td></tr><tr><td colspan="2" class="navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"><b>High-level, platform-specific</b></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">On <a href="AmigaOS" title="AmigaOS">AmigaOS</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="BOOPSI" title="BOOPSI">BOOPSI</a></li>
<li><a href="Magic_User_Interface" title="Magic User Interface">MUI</a></li>
<li><a href="ReAction_GUI" title="ReAction GUI">ReAction GUI</a></li>
<li><a href="Zune_(widget_toolkit)" title="Zune (widget toolkit)">Zune</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">On <a href="Classic_Mac_OS" title="Classic Mac OS">Classic Mac OS</a>, <a href="MacOS" title="MacOS">macOS</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Object_Pascal" title="Object Pascal">Object Pascal</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="MacApp" title="MacApp">MacApp</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Objective-C" title="Objective-C">Objective-C</a>, <a href="Swift_(programming_language)" title="Swift (programming language)">Swift</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Cocoa_(API)" title="Cocoa (API)">Cocoa</a></li>
<li><a href="Cocoa_Touch" class="mw-redirect" title="Cocoa Touch">Cocoa Touch</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="C%2B%2B" title="C++">C++</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="MacApp" title="MacApp">MacApp</a></li>
<li><a href="PowerPlant" title="PowerPlant">PowerPlant</a></li>
<li><a href="THINK_C" title="THINK C">THINK C</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Common_Language_Infrastructure" title="Common Language Infrastructure">CLI</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Xamarin#Xamarin.Mac" title="Xamarin">Xamarin.Mac</a></li>
<li><a href="Mono_(software)#Xamarin.iOS" title="Mono (software)">Xamarin.iOS</a></li></ul>
</div></td></tr></tbody></table><div></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">On <a href="Microsoft_Windows" title="Microsoft Windows">Windows</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Common_Language_Infrastructure" title="Common Language Infrastructure">CLI</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Windows_Forms" title="Windows Forms">Windows Forms</a></li>
<li><a href="Extensible_Application_Markup_Language" title="Extensible Application Markup Language">XAML</a>
<ul><li><a href="Windows_Presentation_Foundation" title="Windows Presentation Foundation">Windows Presentation Foundation</a></li>
<li><a href="Windows_UI_Library" title="Windows UI Library">Windows UI Library</a></li>
<li><a href="Microsoft_Silverlight" title="Microsoft Silverlight">Silverlight</a></li></ul></li>
<li><a href="Microsoft_XNA" title="Microsoft XNA">Microsoft XNA</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="C%2B%2B" title="C++">C++</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Microsoft_Foundation_Class_Library" title="Microsoft Foundation Class Library">MFC</a></li>
<li><a href="Active_Template_Library" title="Active Template Library">Active Template Library</a></li>
<li><a href="Windows_Template_Library" title="Windows Template Library">Windows Template Library</a></li>
<li><a href="Object_Windows_Library" title="Object Windows Library">Object Windows Library</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Object_Pascal" title="Object Pascal">Object Pascal</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Visual_Component_Library" title="Visual Component Library">Visual Component Library</a></li></ul>
</div></td></tr></tbody></table><div></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">On <a href="Unix" title="Unix">Unix</a>,<br>under <a href="X_Window_System" title="X Window System">X11</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="X_Athena_Widgets" title="X Athena Widgets">Athena (Xaw)</a></li>
<li><a href="LessTif" title="LessTif">LessTif</a></li>
<li><a href="Motif_(software)" title="Motif (software)">Motif</a></li>
<li><a href="OLIT" title="OLIT">OLIT</a></li>
<li><a href="XForms_(toolkit)" title="XForms (toolkit)">XForms</a></li>
<li><a href="XView" title="XView">XView</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">On <a href="Android_(operating_system)" title="Android (operating system)">Android</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Android_software_development#Qt_for_Android" title="Android software development">Qt for Android</a></li></ul>
</div></td></tr><tr><td colspan="2" class="navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"><b>High-level, cross-platform</b></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="C_(programming_language)" title="C (programming language)">C</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Enlightenment_Foundation_Libraries" title="Enlightenment Foundation Libraries">Enlightenment Foundation Libraries</a></li>
<li><a href="GTK" title="GTK">GTK</a></li>
<li><a href="IUP_(software)" title="IUP (software)">IUP</a></li>
<li><a href="XForms_(toolkit)" title="XForms (toolkit)">XForms</a></li>
<li><a href="XVT" title="XVT">XVT</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="C%2B%2B" title="C++">C++</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Bedrock_(framework)" title="Bedrock (framework)">Bedrock</a></li>
<li><a href="CEGUI" title="CEGUI">CEGUI</a></li>
<li><a href="Component_Library_for_Cross_Platform" title="Component Library for Cross Platform">Component Library for Cross Platform</a></li>
<li><a href="FLTK" title="FLTK">FLTK</a></li>
<li><a href="Fox_toolkit" title="Fox toolkit">FOX toolkit</a></li>
<li><a href="OpenGL_User_Interface_Library" class="mw-redirect" title="OpenGL User Interface Library">OpenGL User Interface Library</a></li>
<li><a href="Gtkmm" title="Gtkmm">gtkmm</a></li>
<li><a href="JUCE" title="JUCE">JUCE</a></li>
<li><a href="Qt_(software)" title="Qt (software)">Qt</a></li>
<li><a href="Rogue_Wave_Software" title="Rogue Wave Software">Rogue Wave Views</a></li>
<li><a href="TnFOX" class="mw-redirect" title="TnFOX">TnFOX</a></li>
<li><a href="Ultimate%2B%2B" title="Ultimate++">U++</a></li>
<li><a href="Wt_(web_toolkit)" title="Wt (web toolkit)">Wt</a></li>
<li><a href="WxWidgets" title="WxWidgets">wxWidgets</a></li>
<li><a href="Simple_and_Fast_Multimedia_Library" title="Simple and Fast Multimedia Library">Simple and Fast Multimedia Library</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Objective-C" title="Objective-C">Objective-C</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="GNUstep" title="GNUstep">GNUstep</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Common_Language_Infrastructure" title="Common Language Infrastructure">CLI</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Gtk_Sharp" class="mw-redirect" title="Gtk Sharp">Gtk#</a></li>
<li><a href="Tao_Framework" title="Tao Framework">Tao Framework</a>
<ul><li><a href="OpenTK" title="OpenTK">OpenTK</a></li></ul></li>
<li><a href="UIML" title="UIML">UIML</a></li>
<li><a href="MonoGame" title="MonoGame">MonoGame</a></li>
<li><a href="Moonlight_(runtime)" title="Moonlight (runtime)">Moonlight</a></li>
<li><a href="Xamarin#Xamarin.Forms" title="Xamarin">Xamarin.Forms</a></li>
<li>XWT<a rel="nofollow" class="external autonumber" href="https://www.mono-project.com/docs/gui/#xwt">[1]</a><a rel="nofollow" class="external autonumber" href="https://github.com/mono/xwt">[2]</a></li>
<li><a href=".NET#.NET_MAUI" title=".NET">.NET MAUI</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Adobe_Flash" title="Adobe Flash">Adobe Flash</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Apache_Flex" title="Apache Flex">Apache Flex</a>
<ul><li><a href="MXML" title="MXML">MXML</a></li></ul></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Go_(programming_language)" title="Go (programming language)">Go</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Fyne_(software)" title="Fyne (software)">Fyne</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Haskell" title="Haskell">Haskell</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="WxHaskell" title="WxHaskell">wxHaskell</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Java_(programming_language)" title="Java (programming language)">Java</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Abstract_Window_Toolkit" title="Abstract Window Toolkit">Abstract Window Toolkit</a></li>
<li><a href="FXML" title="FXML">FXML</a></li>
<li><a href="JavaFX" title="JavaFX">JavaFX</a></li>
<li><a href="Qt_Jambi" class="mw-redirect" title="Qt Jambi">Qt Jambi</a></li>

<li><a href="Standard_Widget_Toolkit" title="Standard Widget Toolkit">Standard Widget Toolkit</a></li>
<li><a href="Google_Web_Toolkit" title="Google Web Toolkit">Google Web Toolkit</a></li>
<li><a href="Lightweight_User_Interface_Toolkit" title="Lightweight User Interface Toolkit">Lightweight User Interface Toolkit</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="JavaScript" title="JavaScript">JavaScript</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Dojo_Toolkit" title="Dojo Toolkit">Dojo Toolkit</a></li>
<li><a href="Echo_(framework)" title="Echo (framework)">Echo</a></li>
<li><a href="Ext_JS" title="Ext JS">Ext JS</a></li>
<li><a href="Google_Closure_Tools" title="Google Closure Tools">Google Closure Tools</a></li>
<li><a href="JQuery_UI" title="JQuery UI">jQuery UI</a></li>
<li><a href="OpenUI5" title="OpenUI5">OpenUI5</a></li>
<li><a href="Qooxdoo" title="Qooxdoo">Qooxdoo</a></li>
<li><a href="YUI_Library" title="YUI Library">YUI</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Common_Lisp" title="Common Lisp">Common Lisp</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="LispWorks" title="LispWorks">CAPI</a></li>
<li><a href="Common_Lisp_Interface_Manager" title="Common Lisp Interface Manager">CLIM</a></li>
<li><a href="Allegro_Common_Lisp" title="Allegro Common Lisp">Common Graphics</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Lua" title="Lua">Lua</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="IUP_(software)" title="IUP (software)">IUP</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Pascal_(programming_language)" title="Pascal (programming language)">Pascal</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Lazarus_Component_Library" title="Lazarus Component Library">Lazarus Component Library</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Object_Pascal" title="Object Pascal">Object Pascal</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Component_Library_for_Cross_Platform" title="Component Library for Cross Platform">Component Library for Cross Platform</a></li>
<li><a href="FpGUI" title="FpGUI">fpGUI</a></li>
<li><a href="IP_Pascal" title="IP Pascal">IP Pascal</a></li>
<li><a href="FireMonkey" title="FireMonkey">FireMonkey</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Perl" title="Perl">Perl</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li>Perl/<a href="Tk_(software)" title="Tk (software)">Tk</a></li>
<li><a href="WxPerl" class="mw-redirect" title="WxPerl">wxPerl</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="PHP" title="PHP">PHP</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="PHP-GTK" title="PHP-GTK">PHP-GTK</a></li>
<li><a href="WxPHP" title="WxPHP">wxPHP</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Python_(programming_language)" title="Python (programming language)">Python</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Tkinter" title="Tkinter">Tkinter</a></li>
<li><a href="Kivy_(framework)" title="Kivy (framework)">Kivy</a></li>
<li><a href="PySide" title="PySide">PySide</a></li>
<li><a href="PyQt" title="PyQt">PyQt</a></li>
<li><a href="PyGTK" title="PyGTK">PyGTK</a></li>
<li><a href="WxPython" title="WxPython">wxPython</a></li>
<li><a href="Pyjs" title="Pyjs">Pyjs</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Ruby_(programming_language)" title="Ruby (programming language)">Ruby</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Shoes_(GUI_toolkit)" class="mw-redirect" title="Shoes (GUI toolkit)">Shoes</a></li>
<li><a href="QtRuby" class="mw-redirect" title="QtRuby">QtRuby</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Tcl" title="Tcl">Tcl</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Tk_(software)" title="Tk (software)">Tcl/Tk</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="XML" title="XML">XML</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Glade_Interface_Designer" title="Glade Interface Designer">GladeXML</a></li>
<li><a href="Lively_Kernel" title="Lively Kernel">Lively Kernel</a></li>
<li><a href="Extensible_Application_Markup_Language" title="Extensible Application Markup Language">Extensible Application Markup Language</a></li>
<li><a href="XUL" title="XUL">XUL</a></li>
<li><a href="Wt_(web_toolkit)" title="Wt (web toolkit)">Wt</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Unix_shell" title="Unix shell">shell</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Newt_(programming_library)" title="Newt (programming library)">Newt</a></li>
<li><a href="CDK_(programming_library)" title="CDK (programming library)">CDK</a></li>
<li><a href="Dialog_(software)" title="Dialog (software)">Dialog</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Dart_(programming_language)" title="Dart (programming language)">Dart</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Flutter_(software)" title="Flutter (software)">Flutter</a></li></ul>
</div></td></tr></tbody></table></div></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2024-12-21" href="https://en.wikipedia.org/wiki/?title=Swing_(Java)&amp;oldid=1264414346">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>

</body></html>